// /****   request.js   ****/
// // 导入axios
// import axios from "axios";
// import Cookies from "js-cookie";
// import config from "@/config/index";
// const baseUrl =
//   process.env.NODE_ENV === "development"
//     ? config.baseUrl.dev
//     : config.baseUrl.pro;
// //1. 创建新的axios实例，
// const service = axios.create({
//   // 公共接口
//   baseURL: baseUrl,
//   // 超时时间
//   timeout: 50 * 1000,
// });
// // 2.请求拦截器
// service.interceptors.request.use(
//   (config) => {
//     //发请求前做处理，配置请求头，设置token,设置loading等
//     config.data = JSON.stringify(config.data); //数据转化
//     config.headers = {
//       Authorization: Cookies.get("token")?Cookies.get("token"):localStorage.getItem('token'),
//       "Content-Type": "application/json", //配置请求头
//     };
//     return config;
//   },
//   (error) => {
//     Promise.reject(error);
//   }
// );

// // 3.响应拦截器
// service.interceptors.response.use(
//   (response) => {
//     //接收到响应数据并成功后的一些处理
//     return response.data;
//   },
//   (error) => {
//     /***** 接收到异常响应的处理 *****/
//     return Promise.resolve(error.response);
//   }
// );
// //4.导入文件
// export default service;

/****   request.js   ****/
import axios from "axios";
import config from "@/config/index";
import { Toast } from "vant";
import router from "@/router";

const baseUrl =
  process.env.NODE_ENV === "development"
    ? config.baseUrl.dev
    : config.baseUrl.pro;

// 不需要检查token的白名单路径
const WHITE_LIST = ["/login", "/register","/aboutMine","/policy"];

const service = axios.create({
  baseURL: baseUrl,
  timeout: 50 * 1000,
});

// 处理未授权的统一方法
function handleUnauthorized(message = "登录状态已过期，请重新登录") {
  // 如果当前已经在白名单页面，则不处理
  if (WHITE_LIST.includes(router.currentRoute.path)) {
    return;
  }

  // 清除本地存储的token
  localStorage.removeItem("token");

  // 显示提示信息
  Toast.fail({
    message,
    duration: 2000,
    onClose: () => {
      // 跳转到登录页面
      router.replace({
        path: "/login",
        query: {
          redirect: router.currentRoute.fullPath,
        },
      });
    },
  });
}

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 如果是白名单路径，不检查token
    if (WHITE_LIST.includes(router.currentRoute.path)) {
      return config;
    }
    // 检查token是否存在
    const token = localStorage.getItem("token");
    if (!token) {
      const cardNo = localStorage.getItem("cardNo");
      const cardPwd = localStorage.getItem("cardPwd");
      // 先显示提示
      Toast.fail({
        message: "请先登录",
        duration: 2000,
        onClose: () => {
          console.log(router.currentRoute.query, "router.currentRoute.query");
          // 跳转到登录页面
          router.replace({
            path: "/login",
            query: {
              cardNo,
              cardPwd,
              redirect: router.currentRoute.fullPath,
            },
          });
        },
      });
      // 返回一个永远不会resolve的Promise，阻止请求发出
      return new Promise(() => {});
    }

    // 配置请求
    config.data = JSON.stringify(config.data);
    config.headers = {
      Authorization: token,
      "Content-Type": "application/json",
    };
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    const data = response.data;

    // 处理业务代码401
    if (data.code === 401) {
      handleUnauthorized();
      return Promise.reject(data);
    }
    if (data.code == 500) {
      Toast(data.msg);
      return Promise.reject(data);
    }

    return data;
  },
  (error) => {
    // 处理HTTP状态码401
    if (error.response && error.response.status === 401) {
      handleUnauthorized();
    }
    let { message } = error;
    if (message == "Network Error") {
      message = "后端接口连接异常";
    } else if (message.includes("timeout")) {
      message = "系统接口请求超时";
    } else if (message.includes("Request failed with status code")) {
      message = "系统接口异常";
    }
    Toast(message);
    return Promise.reject(error);
  }
);

export default service;
